//
// Created by Administrator on 24-10-10.
//
#include "main.h"
#include "My_Settings.h"



void controlMotor(Motor motor, int16_t speed) {





    // 根据速度值设置电机的方向
    if (speed > 0) {  // 正转
        switch (motor) {
            case MOTORA:
                HAL_GPIO_WritePin(GPIOE, AIN1_Pin, GPIO_PIN_SET);
                HAL_GPIO_WritePin(GPIOE, AIN2_Pin, GPIO_PIN_RESET);
                break;
            case MOTORB:
                HAL_GPIO_WritePin(GPIOE, BIN1_Pin, GPIO_PIN_SET);
                HAL_GPIO_WritePin(GPIOE, BIN2_Pin, GPIO_PIN_RESET);
                break;
            case MOTORC:
                HAL_GPIO_WritePin(GPIOE, CIN1_Pin, GPIO_PIN_SET);
                HAL_GPIO_WritePin(GPIOE, CIN2_Pin, GPIO_PIN_RESET);
                break;
            case MOTORD:
                HAL_GPIO_WritePin(GPIOE, DIN1_Pin, GPIO_PIN_SET);
                HAL_GPIO_WritePin(GPIOE, DIN2_Pin, GPIO_PIN_RESET);
                break;
            default:
                // 处理无效的电机编号
                break;
        }
    } else if (speed < 0) {  // 反转
        switch (motor) {
            case MOTORA:
                HAL_GPIO_WritePin(GPIOE, AIN1_Pin, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOE, AIN2_Pin, GPIO_PIN_SET);
                break;
            case MOTORB:
                HAL_GPIO_WritePin(GPIOE, BIN1_Pin, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOE, BIN2_Pin, GPIO_PIN_SET);
                break;
            case MOTORC:
                HAL_GPIO_WritePin(GPIOE, CIN1_Pin, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOE, CIN2_Pin, GPIO_PIN_SET);
                break;
            case MOTORD:
                HAL_GPIO_WritePin(GPIOE, DIN1_Pin, GPIO_PIN_RESET);
                HAL_GPIO_WritePin(GPIOE, DIN2_Pin, GPIO_PIN_SET);
                break;
            default:
                // 处理无效的电机编号
                break;
        }
    }

    // 设置PWM占空比来控制电机速度
    uint16_t dutyCycle = abs(speed);  // 假设速度范围是-100到100
    dutyCycle%=100;  // 限制最大值为100
    

    switch (motor) {
        case MOTORA:
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_4, dutyCycle);
            break;
        case MOTORB:
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, dutyCycle);
            break;
        case MOTORC:
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_3, dutyCycle);
            break;
        case MOTORD:
            __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, dutyCycle);
            break;
        default:
            // 处理无效的电机编号
            break;
    }
}
